package com.mxf.code.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mxf.code.service.ChildrenTree;
import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.Objects;


/**
 * 空间位置管理
 */
@Data
@TableName("g_space")
public class SpaceEntity implements ChildrenTree<SpaceEntity> {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId
    private Long id;
    /**
     * 空间类型，space_unit：空间单元，default：空间位置
     */
    private String typeCode;
    /**
     * 空间编码，如F1
     */
    private String poiCode;
    /**
     * 空间名称
     */
    @TableField("name")
    private String name;
    /**
     * 空间描述
     */
    private String description;
    /**
     * 空间用途
     */
    private Long spaceUsageCategoryId;
    /**
     * 空间分类
     */
    private Long locationCategoryId;
    /**
     * 父空间id
     */
    private Long parentSpaceId;
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createDate;
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateDate;
    /**
     * 创建人
     */
    @TableField(fill = FieldFill.INSERT)
    private Long creator;
    /**
     * 更新人
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updater;

    @TableField(exist = false)
    private List<SpaceEntity> children;

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof SpaceEntity)) {
            return false;
        }
        SpaceEntity that = (SpaceEntity) o;
        boolean b = Objects.equals(getName(), that.getName());
        b &= Objects.equals(getPoiCode(), that.getPoiCode());
        b &= Objects.equals(getSpaceUsageCategoryId(), that.getSpaceUsageCategoryId());
        return b;
    }

    @Override
    public int hashCode() {
        return getName().hashCode();
    }
}
